#ifndef ABSTRACT_PRODUCT_H
#define ABSTRACT_PRODUCT_H

class AbstractProductA
{
public:
	AbstractProductA(){}
	virtual ~AbstractProductA(){}

	virtual void Print() = 0;
};

class ProductA2 : public AbstractProductA
{
public:
	ProductA2(){}
	virtual ~ProductA2(){}

	void Print();
};

class ProductA : public AbstractProductA
{
public:
	ProductA(){}
	virtual ~ProductA(){}

	void Print();
};

class AbstractProductB
{
public:
	AbstractProductB(){}
	virtual ~AbstractProductB(){}

	virtual void Print() = 0;
};

class ProductB : public AbstractProductB 
{
public:
	ProductB(){}
	virtual ~ProductB(){}

	void Print();
};



class ProductB2 : public AbstractProductB 
{
public:
	ProductB2(){}
	virtual ~ProductB2(){}

	void Print();
};

#endif